06. 让 git 忽略某些文件

## 为何要忽略文件

还记得在几个章节之前学习的 git add 吗?我们可以使用一个特殊的字符来表示当前目录和所有子目录,而不用一个个地添加文件。还记得是什么字符吗?

没错,是句点 ( . )!

问题

假设你向项目所在目录添加了一个 Word 文档等文件,但是不希望将该文件添加到仓库中。git 会看到这个新文件,所以在你运行 git status 时,它将显示在文件列表中。

_终端显示了 `git status` 命令的输出结果。git 的"Untracked files"部分显示了新的 Word 文档。_

终端显示了 git status 命令的输出结果。git 的"Untracked files"部分显示了新的 Word 文档。

在项目中包含此文件存在的潜在问题是,因为 git add . 会添加所有文件,因此该 Word 文档可能会不小心 commit 到仓库。

gitignore

如果你想将某个文件保留在项目的目录结构中,但是确保它不会意外地提交到项目中,可以使用名称特殊的文件 .gitignore (注意文件名开头的点,很重要!)。将此文件添加到 new-git-project 项目根目录。你只需列出希望 git ignore(忽略,不跟踪)的文件名,git 将忽略这些文件。

我们用"project.docx"文件试一下。将以下行添加到 .gitignore 文件中:

project.docx

现在运行 git status 并查看输出结果:

_终端显示了 `git status` 的输出结果。Word 文档已不再列为未跟踪文件。但是列出了新的".gitignore"文件。_

终端显示了 git status 的输出结果。Word 文档已不再列为未跟踪文件。但是列出了新的".gitignore"文件。

git 知道查看名称为 .gitignore 的文件的内容。因为它在其中看到"project.docx",所以忽略了该文件,并且没有在 git status 的输出结果中显示该文件。

通配符速成课程

假设你向项目中添加了 50 个图片,但是希望 git 忽略所有这些图片。这样的话,是否需要将每个文件名都列在 .gitignore 文件中呢?当然不用了,要不然太可怕了!相反,你可以采用一个叫做 通配符( ) 的概念。

通配符允许你使用特殊的字符来表示某些格式/字符。在 .gitignore 文件中,你可以使用:

  • 空白行作为空格
  • # - 将行标记为注释
  • * - 与 0 个或多个字符匹配
  • ? - 与 1 个字符匹配
  • [abc] - 与 a、b 或 c 匹配
  • ** - 与嵌套目录匹配 - a/**/z 与以下项匹配
    • a/z
    • a/b/z
    • a/b/c/z

因此如果所有 50 个图片都是 JPEG 图片,并且位于"samples"文件夹中,那么我们可以向 .gitignore 中添加以下行,使 git 忽略所有这 50 个图片。

samples/*.jpg

哪些文件将被忽略?

如果在 .gitignore 文件中输入 *.png ,以下哪些文件将被忽略?

SOLUTION:
  • trees.png
  • bg-pattern.png
  • LOUDFILE.PNG

这个字符的作用是什么?

如果你让 git 忽略"be?rs”,那么会忽略下面的哪些文件名?

SOLUTION:
  • bears
  • beers

gitignore 小结

总结下, .gitignore 文件用来告诉 git 不应跟踪的文件。该文件应该放在 .git 目录所在的目录。

深入研究